package dao.user;

import domain.user.User;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 文件描述
 * 通过配置文件得到dao实现类名称
 * 通过类名称，完成创建类对象！（使用反射完成）
 * @Author 冯根源
 * @create 2020/4/2 10:20
 */
public class DaoFactory {

    private static Properties properties = null;

    static {
        /**
         * 加载Properties文件到properties对象中
         */
        InputStream in = DaoFactory.class.getClassLoader().getResourceAsStream("dao.properties");
        properties = new Properties();
        try {
            properties.load(in);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 返回Dao具体的实现类
     *
     * @return
     */
    public static UserDao getUserDao() {
        /**
         * 给出一个配置文件，文件中给出UserDao接口的实现类名称
         * 我们这个方法，获取实现类的类名，通过反射完成创建对象
         */
        String daoClassName = properties.getProperty("dao.user.UserDao");
        /**
         * 通过反射创建实现类的对象
         */
        try {
            Class clazz = Class.forName(daoClassName);
            return (UserDao) clazz.newInstance();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }
}
